package com.atguigu.strategy.improve;

/**
 * @program: design-patterns
 * @author: yangshen
 * @description:
 * @create: 2022-04-04 09:37
 **/
public abstract class Duck {
    String name;
    /**
     * 聚合（飞翔）属性接口，策略接口
     */
    FlyBehavior flyBehavior;
    /**
     * 其他属性接口<->策略接口（叫声和游泳这两个策略接口，其实现类方式如同飞翔策略接口）
     */
    QuackBehavior quackBehavior;
    Swim swim;

    public Duck() {
    }

    /**
     * 显示鸭子信息
     */
    public abstract void display();

    public void fly(){
        if (null != flyBehavior){
            flyBehavior.fly(name);
        }else {
            System.out.println("飞翔异常");
        }
    }

    public void quack(){
        if (null != quackBehavior){
            quackBehavior.quack(name);
        }else {
            System.out.println("叫声异常");

        }
    }

    public void swim(){
        System.out.println("鸭子会游泳~~");
    }
}
